package fi.foyt.cs.controller;

import java.util.List;

import fi.foyt.cs.persistence.dao.scene.SceneCategoryDAO;
import fi.foyt.cs.persistence.dao.scene.SceneDAO;
import fi.foyt.cs.persistence.domainmodel.scene.Scene;
import fi.foyt.cs.persistence.domainmodel.scene.SceneCategory;
import fi.foyt.cs.persistence.domainmodel.scene.SceneCategoryType;
import fi.foyt.cs.persistence.domainmodel.scene.SceneType;

public class SceneController {
  
  public Scene createScene(SceneCategory sceneCategory, SceneType sceneType, String externalId) {
    SceneDAO sceneDAO = new SceneDAO();
    return sceneDAO.create(sceneCategory != null ? sceneCategory.getId().getId() : null, sceneType, externalId);
  }

  public SceneCategory createSceneCategory(SceneCategory parentCategory, String name, SceneCategoryType categoryType, String externalId) {
    SceneCategoryDAO sceneCategoryDAO = new SceneCategoryDAO();
    return sceneCategoryDAO.create(name, parentCategory != null ? parentCategory.getId().getId() : null, categoryType, externalId);
  }
  
  public Scene findSceneById(Long id) {
    SceneDAO sceneDAO = new SceneDAO();
    return sceneDAO.findById(id);
  }
  
  public Scene findSceneByTypeAndExternalId(SceneType sceneType, String externalId) {
    SceneDAO sceneDAO = new SceneDAO();
    return sceneDAO.findByTypeAndExternalId(sceneType, externalId); 
  }
  
  public SceneCategory findSceneCategory(Long id) {
    SceneCategoryDAO sceneCategoryDAO = new SceneCategoryDAO();
    return sceneCategoryDAO.findById(id);
  }
  
  public SceneCategory findSceneCategoryByTypeAndExternalId(SceneCategoryType sceneCategoryType, String externalId) {
    SceneCategoryDAO sceneCategoryDAO = new SceneCategoryDAO();
    return sceneCategoryDAO.findByTypeAndExternalId(sceneCategoryType, externalId); 
  }
  
  public List<SceneCategory> listSceneCategories(SceneCategory parentCategory) {
    SceneCategoryDAO sceneCategoryDAO = new SceneCategoryDAO();
    return sceneCategoryDAO.listByParentCategoryId(parentCategory != null ? parentCategory.getId().getId() : null);
  }
  
  public List<SceneCategory> listSceneCategories(SceneCategory parentCategory, int firstResult, int maxResults) {
    SceneCategoryDAO sceneCategoryDAO = new SceneCategoryDAO();
    return sceneCategoryDAO.listByParentCategoryId(parentCategory != null ? parentCategory.getId().getId() : null, firstResult, maxResults);
  }
  
  public Integer countSceneCategories(SceneCategory parentCategory) {
    SceneCategoryDAO sceneCategoryDAO = new SceneCategoryDAO();
    return sceneCategoryDAO.countByParentCategoryId(parentCategory != null ? parentCategory.getId().getId() : null);
  }
  
  public List<SceneCategory> listSceneCategories() {
    SceneCategoryDAO sceneCategoryDAO = new SceneCategoryDAO();
    return sceneCategoryDAO.listAll();
  }
  
  public SceneCategory updateSceneCategoryName(SceneCategory sceneCategory, String name) {
    SceneCategoryDAO sceneCategoryDAO = new SceneCategoryDAO();
    return sceneCategoryDAO.updateName(sceneCategory, name);
  }

}
